package com.kang.dao;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.kang.pojo.Audit;
import com.kang.pojo.AuditFlow;
import com.kang.pojo.AuditFlowItem;
import com.kang.pojo.AuditItem;
import com.kang.pojo.AuditRecord;
import com.vonechina.entity.page.AuditPage;

/**
 * 审核持久层
 * 
 * @author zs614
 *
 */
public interface AuditItemMapper {
	/**
	 * 插入审核记录
	 * 
	 * @param audit
	 *            审核记录实体类
	 * @return 修改记录条数
	 */
	int insertdataaudit(Audit audit);

	/**
	 * 通过ID查找审核流程
	 * 
	 * @param id
	 *            审核流程ID
	 * @return 审核流程
	 */
	AuditFlow selectAuditFlow(Integer id);

	/**
	 * 通过ID查找审核流程节点
	 * 
	 * @param id
	 *            审核流程节点ID
	 * @return 审核流程节点
	 */
	List<AuditFlowItem> selectAuditFlowItem(Integer id);

	/**
	 * 插入审核记录节点
	 * 
	 * @param audititem
	 *            审核记录节点实体类
	 * @return 修改记录条数
	 */
	int insertdataaudititem(AuditItem audititem);

	/**
	 * 分页查询审核记录
	 * 
	 * @param auditPage
	 *            搜索条件实体类
	 * @return 审核记录列表
	 */
	List<Map<String, Object>> getselectdata(AuditPage auditPage);

	/**
	 * 查询审核记录条数
	 * 
	 * @param auditPage
	 *            搜索条件实体类
	 * @return 返回审核记录条数
	 */
	int getselectdataCount(AuditPage auditPage);

	/**
	 * 通过用户ID查询出用户名
	 * 
	 * @param auditPassUserID
	 *            用户ID
	 * @return 返回用户
	 */
	String selectUserRoles(int auditPassUserID);

	/**
	 * 根据角色ID查询该角色下所有用户名称
	 * 
	 * @param roleID
	 * @return 返回用户名集合
	 */
	List<String> selectlistnames(int roleID);

	/**
	 * 查询前审批级别信息
	 * 
	 * @param id
	 *            审核记录节点ID
	 * @return 当前审核节点信息
	 */
	Map<String, Object> selectCurrentlevelInfo(int id);

	/**
	 * 未完全通过时候，修改当前审批人
	 * 
	 * @param id
	 *            审核节点ID
	 * @param userID
	 *            拒绝用户ID
	 * @param auditRejectUserID
	 *            拒绝用户ID
	 * @return 修改记录条数
	 */
	int saveRejectUserID(@Param("id") int id, @Param("userID") int userID,
			@Param("auditRejectUserID") String auditRejectUserID);

	/**
	 * 保存审核环节通过用户ID
	 * 
	 * @param id
	 *            审核节点ID
	 * @param auditPassUserID
	 *            通过用户ID
	 * @return 修改记录条数
	 */
	int savePassUserID(@Param("id") int id, @Param("auditPassUserID") String auditPassUserID);

	/**
	 * 修改审核环节状态
	 * 
	 * @param id
	 *            审核节点ID
	 * @param status
	 *            状态
	 * @return 修改记录条数
	 */
	int setAuditItemStatus(@Param("id") int id, @Param("status") int status);

	/**
	 * 修改审核记录状态
	 * 
	 * @param auditID
	 *            审核记录ID
	 * @param status
	 *            状态
	 * @return 修改记录条数
	 */
	int updateAuditStatus(@Param("auditID") int auditID, @Param("status") int status);

	/**
	 * 修改审核记录当前审核等级
	 * 
	 * @param auditID
	 *            审核节点ID
	 * @param currentLevel
	 *            当前级别
	 * @return 修改记录条数
	 */
	int updateAuditCurrentLevel(@Param("auditID") int auditID, @Param("currentLevel") int currentLevel);

	/**
	 * 添加审批结果的记录
	 * 
	 * @param auditRecord
	 *            审核记录实体类
	 * @return 修改记录条数
	 */
	int insertauditrecord(AuditRecord auditRecord);
	
	/**
	 * 查询出我已审批的数据信息 
	 * @param userID	登录的用户
	 * @return	我已审批的数据信息 
	 */
	public  Integer countApproveByMe(@Param("userID")int userID,@Param("auditType")int auditType);
	
	/**
	 * 查询出我的通过审批总数
	 * @param userID	登录的用户
	 * @return	我的通过审批总数
	 */
	public  Map<String,Object> getpassapplynumber(int userID);
	
	/**
	 * 查询出我的拒绝审批总数
	 * @param userID	登录的用户
	 * @return	我的拒绝审批总数
	 */
	public  Map<String,Object> getrejectapplynumber(int userID);
	
	/**
	 * 查询带我操作审核记录
	 * @param auditPage
	 * @return
	 */
	int countNeedApproveByMe(AuditPage auditPage);
}